<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var p = {
            name: 'sam',
            age: 20,
            hobby: ['弹琴', '围棋', '品茶'],
            money: function () {
                console.log(1000);
            },
            son: { name: 'vivi', age: 2, hobby: ['写诗', '乐高'] },
            er: /^1[356789]\d{9}$/
        }
        
        // 浅拷贝  简单数据类型拷贝值,复杂数据类型拷贝地址
        // (改变新对象的简单数据类型的值,源对象值不变;改变任意对象的复杂数据类型的值时,两个对象都改变)
        // var p2 = {
        //     name: 'join',
        //     gender: '男'
        // }
        // Object.assign(p2, p);
        // p.hobby[1] = '打球';
        // console.log(p);
        // console.log(p2);

        //深拷贝
        //改变简单或复杂数据类型的值都不会影响对方
        // 封装函数 
        function deepCopy(newobj, oldobj) {
            for (var k in oldobj) {
                // 判断我们的属性值属于那种数据类型
                // 1. 获取属性值  oldobj[k]
                var item = oldobj[k];
                // 2. 判断这个值是否是数组
                if (item instanceof Array) {
                    newobj[k] = [];
                    deepCopy(newobj[k], item)
                } else if (item instanceof Object) {
                    // 3. 判断这个值是否是对象
                    newobj[k] = {};
                    deepCopy(newobj[k], item)
                } else {
                    // 4. 属于简单数据类型
                    newobj[k] = item;
                }
            }
        };
        // var p3 = {
        //     name: 'join',
        //     gender: '男'
        // }
        // deepCopy(p3, p);
        // p.hobby[1] = '打球';
        // console.log(p);
        // console.log(p3);

        // JSON拷贝
        var p4=JSON.parse(JSON.stringify(p));
        console.log(p);
        console.log(p4);
    </script>
</body>

</html>